package top.z.work.module.system.service;

import top.z.work.module.system.entity.SystemRole;
import top.z.work.module.system.entity.SystemRoute;

import java.util.List;
import java.util.Set;

/**
 * 权限 Service 接口
 */
public interface PermissionService {

    /**
     * 查询指定用户的角色列表
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    List<SystemRole> findUserRole(Long userId);

    /**
     * 查询指定用户的菜单列表
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    List<SystemRoute> findUserRoute(Long userId);

    /**
     * 从缓存获取用户角色标识列表
     *
     * @param userId 用户ID
     * @return 用户角色标识列表
     */
    List<String> getUserRoleCodeListFromCache(Long userId);

    /**
     * 从缓存获取用户权限标识列表
     *
     * @param userId 用户ID
     * @return 用户权限标识列表
     */
    List<String> getUserPermissionListFromCache(Long userId);

    /**
     * 设置用户角色
     *
     * @param userId  角色编号
     * @param roleIds 角色编号集合
     */
    void assignUserRole(Long userId, Set<Long> roleIds);

    /**
     * 设置角色菜单
     *
     * @param roleId  角色编号
     * @param menuIds 菜单编号集合
     */
    void assignRoleMenu(Long roleId, Set<Long> menuIds);

    /**
     * 处理角色删除时, 删除关联授权数据
     *
     * @param roleId 角色编号
     */
    void processDeleteRole(Long roleId);

    /**
     * 处理菜单删除时, 删除关联授权数据
     *
     * @param menuId 菜单编号
     */
    void processDeleteMenu(Long menuId);

    /**
     * 处理用户删除时, 删除关联授权数据
     *
     * @param userId 用户编号
     */
    void processDeleteUser(Long userId);

}
